package com.ruoyi.site.domain;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;

/**
 * 音效对象 sfx
 * * @author chuckeytang
 * @date 2025-08-17
 */
public class Sfx extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 用于筛选的字段，不映射到数据库列，只用于接收前端参数 */
    private String genres;
    private String moods;
    private Long minDuration;
    private Long maxDuration;
    private String author;

    /** 关联的音效数量（用于筛选器列表） */
    private Long count;
    /** 标准授权价格 */
    @Excel(name = "标准授权价格")
    private BigDecimal standardPrice;

    // Getter 和 Setter 方法
    public String getGenres() {
        return genres;
    }

    public void setGenres(String genres) {
        this.genres = genres;
    }

    public String getMoods() {
        return moods;
    }

    public void setMoods(String moods) {
        this.moods = moods;
    }

    public Long getMinDuration() {
        return minDuration;
    }

    public void setMinDuration(Long minDuration) {
        this.minDuration = minDuration;
    }

    public Long getMaxDuration() {
        return maxDuration;
    }

    public void setMaxDuration(Long maxDuration) {
        this.maxDuration = maxDuration;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public void setCount(Long count) {
        this.count = count;
    }

    public Long getCount() {
        return count;
    }

    public BigDecimal getStandardPrice() {
        return standardPrice;
    }

    public void setStandardPrice(BigDecimal standardPrice) {
        this.standardPrice = standardPrice;
    }

    /** 唯一标识音效的ID */
    private Long sfxId;

    /** 音效标题 */
    @Excel(name = "音效标题")
    private String title;

    /** 音效描述 */
    @Excel(name = "音效描述")
    private String description;

    /** 音效封面图片的URL地址 */
    @Excel(name = "音效封面图片的URL地址")
    private String imageUrl;

    /** 封面图片的替代文本 */
    @Excel(name = "封面图片的替代文本")
    private String imageAltText;

    /** 艺术家/作者名称 */
    @Excel(name = "艺术家/作者名称")
    private String artist;

    /** 音频文件的URL地址 */
    @Excel(name = "音频文件的URL地址")
    private String audioFileUrl;

    /** 音效时长，单位：秒 */
    @Excel(name = "音效时长，单位：秒")
    private Long duration;

    /** 音效类型（如：instrumental, vocal） */
    @Excel(name = "音效类型", readConverterExp = "如=：instrumental,,v=ocal")
    private String type;

    /** 授权类型（如：free, commercial） */
    @Excel(name = "授权类型", readConverterExp = "如=：free,,c=ommercial")
    private String licenseType;

    /** 下载次数 */
    @Excel(name = "下载次数")
    private Long downloadCount;

    /** 是否为精选曲目（0否，1是） */
    @Excel(name = "是否为精选曲目", readConverterExp = "0=否，1是")
    private Integer isFeatured;

    /** 是否启用/可用（0否，1是） */
    @Excel(name = "是否启用/可用", readConverterExp = "0=否，1是")
    private Integer isActive;

    /** 记录创建时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "记录创建时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date createdAt;

    /** 记录更新时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "记录更新时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date updatedAt;

    /** 音效标签列表 */
    private List<Tags> tags;

    public List<Tags> getTags() {
        return tags;
    }

    public void setTags(List<Tags> tags) {
        this.tags = tags;
    }

    public void setSfxId(Long sfxId)
    {
        this.sfxId = sfxId;
    }

    public Long getSfxId()
    {
        return sfxId;
    }

    public void setTitle(String title)
    {
        this.title = title;
    }

    public String getTitle()
    {
        return title;
    }

    public void setDescription(String description)
    {
        this.description = description;
    }

    public String getDescription()
    {
        return description;
    }

    public void setImageUrl(String imageUrl)
    {
        this.imageUrl = imageUrl;
    }

    public String getImageUrl()
    {
        return imageUrl;
    }

    public void setImageAltText(String imageAltText)
    {
        this.imageAltText = imageAltText;
    }

    public String getImageAltText()
    {
        return imageAltText;
    }

    public void setArtist(String artist)
    {
        this.artist = artist;
    }

    public String getArtist()
    {
        return artist;
    }

    public void setAudioFileUrl(String audioFileUrl)
    {
        this.audioFileUrl = audioFileUrl;
    }

    public String getAudioFileUrl()
    {
        return audioFileUrl;
    }

    public void setDuration(Long duration)
    {
        this.duration = duration;
    }

    public Long getDuration()
    {
        return duration;
    }

    public void setType(String type)
    {
        this.type = type;
    }

    public String getType()
    {
        return type;
    }

    public void setLicenseType(String licenseType)
    {
        this.licenseType = licenseType;
    }

    public String getLicenseType()
    {
        return licenseType;
    }

    public void setDownloadCount(Long downloadCount)
    {
        this.downloadCount = downloadCount;
    }

    public Long getDownloadCount()
    {
        return downloadCount;
    }

    public void setIsFeatured(Integer isFeatured)
    {
        this.isFeatured = isFeatured;
    }

    public Integer getIsFeatured()
    {
        return isFeatured;
    }

    public void setIsActive(Integer isActive)
    {
        this.isActive = isActive;
    }

    public Integer getIsActive()
    {
        return isActive;
    }

    public void setCreatedAt(Date createdAt)
    {
        this.createdAt = createdAt;
    }

    public Date getCreatedAt()
    {
        return createdAt;
    }

    public void setUpdatedAt(Date updatedAt)
    {
        this.updatedAt = updatedAt;
    }

    public Date getUpdatedAt()
    {
        return updatedAt;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
                .append("sfxId", getSfxId())
                .append("title", getTitle())
                .append("description", getDescription())
                .append("imageUrl", getImageUrl())
                .append("imageAltText", getImageAltText())
                .append("artist", getArtist())
                .append("audioFileUrl", getAudioFileUrl())
                .append("duration", getDuration())
                .append("type", getType())
                .append("licenseType", getLicenseType())
                .append("downloadCount", getDownloadCount())
                .append("isFeatured", getIsFeatured())
                .append("isActive", getIsActive())
                .append("createdAt", getCreatedAt())
                .append("updatedAt", getUpdatedAt())
                .append("tags", getTags())
                .append("count", getCount())
                .append("standardPrice", getStandardPrice())
                .toString();
    }
}